package com.dyb.demo.string;


public class StringTest {


    public static void main(java.lang.String[] args) {
        StringTest stringTest = new StringTest();
        stringTest.t2();

    }

    public void t1 () {
        String s = "googs";
        String r = s.replace("o", "-");
        System.out.println(r);
        r = s.replaceAll("\\w?", "-");
        System.out.println(r);
    }

    private void t2() {
        // result: true
        // s2.intern() 会将判断字符串常量池有没有，没有会将s2的“堆中对象引用”放入常量池，然后返回
        // s1 创建的时候会直接从字符串常量中查找，有的话会将引用指向s1，这时返回的s2的引用地址，所以s1 == s2
        String s2 = new String("java") + new String("金融");
        s2.intern();
        String s1 = "java金融";
        System.out.println(s1 == s2);

        // result: false
        // s3创建字符串对象没有放入常量池
        // s4创建字符串放入常量池，所以引用地址不一样，s3 != s4
        String s3 = new String("nihao");
        String s4= "nihao";
        System.out.println(s3 == s4);

        // s6.intern() 会返回s5的引用地址，不接收比较引用地址不通不相等，接收后比较就相等
        String s5 = "hahaha";
        String s6 = new String("hahaha");
        s6.intern();
        System.out.println(s5 == s6);
        s6 = s6.intern();
        System.out.println(s5 == s6);
    }
}
